﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Biuro;
using System.Collections;

namespace Biuro.Formy
{
    public partial class SearchTripForm : Form
    {
        ArrayList kraje;

        public ArrayList Kraje
        {
            get { return kraje; }
            set { kraje = value; }
        }
        ArrayList promocje;
        public ArrayList Promocje
        {
            get { return promocje; }
            set
            {
                promocje = value;
                cbPromocja.DataSource = null;
                cbPromocja.DisplayMember = "Nazwa";
                cbPromocja.ValueMember = "Id";
                cbPromocja.DataSource = promocje;
            }
        }
        int _id;

        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }
        string _nazwa;

        public string Nazwa
        {
            get { return _nazwa; }
            set { _nazwa = value; }
        }
        double _cena;

        public double Cena
        {
            get { return _cena; }
            set { _cena = value; }
        }
        public DataTable WynikWyszukiwania
        {
            set
            {
                if (dgwWynik.DataSource != null)
                {
                    dgwWynik.Columns.Remove("x");
                    dgwWynik.Columns.Remove("id");
                    dgwWynik.Columns.Remove("kurort");
                    dgwWynik.Columns.Remove("hotel");
                    dgwWynik.Columns.Remove("cena");
                    dgwWynik.Columns.Remove("przewoznik");
                    dgwWynik.Columns.Remove("dlugosc");
                    dgwWynik.Columns.Remove("kurortOpis");
                    dgwWynik.Columns.Remove("wycieczkaOpis");
                    dgwWynik.Columns.Remove("hotelOpis");
                    dgwWynik.Columns.Remove("wycieczka");
                }
                dgwWynik.DataSource = value;
                DataGridViewCheckBoxColumn column = new DataGridViewCheckBoxColumn();
                {
                    column.HeaderText = "x";
                    column.ReadOnly = false;
                    column.ValueType = typeof(bool);
                    column.TrueValue = true;
                    column.FalseValue = false;
                    column.Name = "x";
                    column.AutoSizeMode =
                        DataGridViewAutoSizeColumnMode.DisplayedCells;
                    column.FlatStyle = FlatStyle.Standard;
                    column.ThreeState = true;
                    column.DefaultCellStyle.NullValue = false;
                    column.CellTemplate = new DataGridViewCheckBoxCell();
                    column.CellTemplate.Style.BackColor = Color.Beige;
                }
                if (dgwWynik.DataSource != null)
                {
                    dgwWynik.Columns.Insert(0, column);
                    dgwWynik.Columns["id"].Visible = false;
                    dgwWynik.Columns["kurort"].ReadOnly = true;
                    dgwWynik.Columns["hotel"].ReadOnly = true;
                    dgwWynik.Columns["cena"].ReadOnly = true;
                    dgwWynik.Columns["przewoznik"].ReadOnly = true;
                    dgwWynik.Columns["dlugosc"].ReadOnly = true;
                    dgwWynik.Columns["kurortOpis"].Visible = false;
                    dgwWynik.Columns["wycieczkaOpis"].Visible = false;
                    dgwWynik.Columns["hotelOpis"].Visible = false;
                    dgwWynik.Columns["wycieczka"].Visible = false;
                }
            }
        }
        public SearchTripForm()
        {
            InitializeComponent();
        }
        
        private void btSzukaj_Click(object sender, EventArgs e)
        {
            try
            {
                string zapytanie = "SELECT id, kurort, hotel, przewoznik, cena, dlugosc, kurortOpis, wycieczkaOpis, hotelOpis, wycieczka FROM oferta";
                bool warunki = false;
                zapytanie += " WHERE data_rozpoczecia >= \'" + dtStart.Value.ToShortDateString() + "\' AND data_zakonczenia <= \'" + dtStop.Value.ToShortDateString() + "\'";
                if (tbCenaMin.TextLength > 0 && tbCenaMax.TextLength > 0)
                {
                    zapytanie += " AND cena BETWEEN " + tbCenaMin.Text + " AND " + tbCenaMax.Text;
                    warunki = true;
                }
                else if (tbCenaMin.TextLength > 0)
                {
                    zapytanie += " AND cena >= " + tbCenaMin.Text;
                    warunki = true;
                }
                else if (tbCenaMax.TextLength > 0)
                {
                    zapytanie += " AND cena <= " + tbCenaMax.Text;
                    warunki = true;
                }

                if ((long)cbKraje.SelectedValue != -1)
                {
                    zapytanie += " AND kraj_id = " + cbKraje.SelectedValue.ToString();
                    warunki = true;
                }
                if ((int)cbPromocja.SelectedValue != -1)
                {
                    zapytanie += " AND promocja_id = " + cbPromocja.SelectedValue.ToString();
                    warunki = true;
                }

                if (PobierzZapytanie != null)
                    PobierzZapytanie(this, new WysylaczEventArgs(zapytanie));
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.Message);
            }
        }

        private void SearchTripForm_Load(object sender, EventArgs e)
        {
            cbKraje.DataSource = null;
            cbKraje.DisplayMember = "Nazwa";
            cbKraje.ValueMember = "Liczba";
            cbKraje.DataSource = kraje;
        }
        public class WysylaczEventArgs : EventArgs
        {
            private string _zapytanie;
            public string Zapytanie
            {
                get { return _zapytanie; }
            }
            public WysylaczEventArgs(string zapytanie)
            {
                this._zapytanie = zapytanie;
            }
        }
        public delegate void WysylaczEventHandler(object sender, WysylaczEventArgs e);

        public event WysylaczEventHandler PobierzZapytanie;

        private void dgwWynik_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            for (int i = 0; i < dgwWynik.Rows.Count; i++)
                dgwWynik.Rows[i].Cells[0].Value = false;
            if (dgwWynik.SelectedRows[0].Cells[0].Value.ToString() == "False")
                dgwWynik.SelectedRows[0].Cells[0].Value = true;
            else
                dgwWynik.SelectedRows[0].Cells[0].Value = false;

            lbKurortOpis.Text = "Opis kurortu: " + Environment.NewLine + dgwWynik.SelectedRows[0].Cells[7].Value.ToString();
            lbWycieczkaOpis.Text = "Opis wycieczki: " + Environment.NewLine + dgwWynik.SelectedRows[0].Cells[8].Value.ToString();
            lbHotelOpis.Text = "Opis hotelu: " + Environment.NewLine + dgwWynik.SelectedRows[0].Cells[9].Value.ToString();
        }

        private void btOk_Click(object sender, EventArgs e)
        {
            try
            {
                if (dgwWynik.SelectedRows[0].Cells[0].Value.ToString() == "True")
                {
                    _id = (int)dgwWynik.SelectedRows[0].Cells[1].Value;
                    _nazwa = dgwWynik.SelectedRows[0].Cells[10].Value.ToString();
                    _cena = Double.Parse(dgwWynik.SelectedRows[0].Cells[5].Value.ToString());
                    
                }
            }
            catch (Exception exp)
            {
                _id = -1;
                _nazwa = "";
                _cena = 0;
            }
        }

        private void SearchTripForm_Paint(object sender, PaintEventArgs e)
        {
            System.Drawing.Drawing2D.LinearGradientBrush basebackground;
            basebackground = new System.Drawing.Drawing2D.LinearGradientBrush(new Point(0, 0), new Point(0, ClientSize.Height), Color.White, Color.LightGray);
            e.Graphics.FillRectangle(basebackground, ClientRectangle);
        }
    }
}
